<?php

namespace App\Services\RongCloud;

class ChatService extends BaseService
{
    /**
     *发生单聊消息
     * @param $fromUserId
     * @param $toUserId
     * @param $content 1文字消息的文字内容，包括表情。  2 图片缩略图，格式为 JPG，大小建议为 5k，最大不超过 80k，注意在 Base64 进行 Encode 后需要将所有 \r\n 和 \r 和 \n 替换成空。
     * @param $types 1文本,2图片,3语音,4文件
     *author:tangfen
     *date:$ct
     */
    public function sendMessage($types,$fromUserId,$toUserId,$content,$imageUri = '',$remoteUrl='',$name='',$size='',$type='',$fileUrl='')
    {
        if (empty($fromUserId) || empty($toUserId) || empty($content)) {
            return false;
        }
        switch ($types)
        {
            case 1://文本
                $objectName = 'RC:TxtMsg';
                $data['content'] = $content;
            break;
            case 2://图片
                $objectName = 'RC:ImgMsg';
                $data['content'] = $content;////图片缩略图，格式为 JPG，大小建议为 5k，最大不超过 80k，注意在 Base64 进行 Encode 后需要将所有 \r\n 和 \r 和 \n 替换成空
                $data['imageUri'] = $imageUri;
                break;
            case 3://语音
                $objectName = 'RC:HQVCMsg';
                $data['remoteUrl'] = $remoteUrl;    //媒体内容上传服务器后的网络地址。
                $data['duration'] = 60;    //语音消息的时长，最长为 60 秒（单位：秒）。
                break;
            case 4://小视频
                $objectName = 'RC:SightMsg';
                $data['sightUrl'] = $remoteUrl;
                $data['content'] = 'sadsads';
                $data['duration'] = 60;
                $data['size'] = 60;
                $data['name'] = '名称';
                break;
            default://文件
                $objectName = 'RC:FileMsg';
                $data['name'] = $name;    //文件名称
                $data['size'] = $size;    //文件大小，单位：Byte。
                $data['type'] = $type;    //文件类型
                $data['fileUrl'] = $fileUrl;    //文件地址。
        }
        $headers = $this->getHeaders();
        $body = http_build_query([
            'fromUserId' => $fromUserId,
            'toUserId' => $toUserId,
            'objectName' =>$objectName,//消息类型
            'content' => json_encode($data) ,
        ]);
        $url = $this->mainHost . '/message/private/publish.json';
        $data = $this->request($url, $body, $headers);
        return resultRongCloudInfo($data);
    }

    /**
     *发生群聊消息
     * @param $fromUserId
     * @param $content 1文字消息的文字内容，包括表情。  2 图片缩略图，格式为 JPG，大小建议为 5k，最大不超过 80k，注意在 Base64 进行 Encode 后需要将所有 \r\n 和 \r 和 \n 替换成空。
     * @param $toGroupId 接收群 ID，提供多个本参数可以实现向多群发送消息，最多不超过 3 个群组。
     * @param $types 1文本,2图片,3语音,4文件
     *author:tangfen
     *date:$ct
     */
    public function sendGroupMessage($types,$fromUserId,$toGroupId,$content,$imageUri = '',$remoteUrl='',$name='',$size='',$type='',$fileUrl='')
    {
        if (empty($fromUserId)|| empty($content)) {
            return false;
        }
        switch ($types)
        {
            case 1://文本
                $objectName = 'RC:TxtMsg';
                $data['content'] = $content;
                break;
            case 2://图片
                $objectName = 'RC:ImgMsg';
                $data['content'] = $content;////图片缩略图，格式为 JPG，大小建议为 5k，最大不超过 80k，注意在 Base64 进行 Encode 后需要将所有 \r\n 和 \r 和 \n 替换成空
                $data['imageUri'] = $imageUri;
                break;
            case 2://语音
                $objectName = 'RC:HQVCMsg';
                $data['remoteUrl'] = $remoteUrl;    //媒体内容上传服务器后的网络地址。
                $data['duration'] = 60;    //语音消息的时长，最长为 60 秒（单位：秒）。
                break;
            default://文件
                $objectName = 'RC:FileMsg';
                $data['name'] = $name;    //文件名称
                $data['size'] = $size;    //文件大小，单位：Byte。
                $data['type'] = $type;    //文件类型
                $data['fileUrl'] = $fileUrl;    //文件地址。
        }
        $headers = $this->getHeaders();
        $body = http_build_query([
            'fromUserId' => $fromUserId,
            'toGroupId'=> $toGroupId,
            'objectName' =>$objectName,//消息类型
            'content' => json_encode($data) ,
        ]);
        $url = $this->mainHost . '/message/group/publish.json';
        $data = $this->request($url, $body, $headers);
        return resultRongCloudInfo($data);
    }


    /**
     * 获取消息日志下载地址（获取聊天记录）
     * 	指定时间，精确到某天某小时，格式为 YYYYMMDDHH。例如 2014010101 表示需要获取 2014 年 1 月 1 日凌晨 1 点至 2 点的数据。
        注意：date 的值与应用所属数据中心有关。如您的 App 业务使用新加坡数据中心，则获取消息日志时使用的时间（date），及日志中的消息时间（dateTime）均为 UTC 时间。
     *  如您仍需根据北京时间下载数据，请自行转换处理。如要下载北京时间 2019120109 的日志，需要输入 2019120101。
     * @param  用户ID
     * @return array
     * @author tangfen
     * @time 2021-12-21 15:04
     */
    public function getChatRecord($time)
    {
        $headers = $this->getHeaders();
        $body = http_build_query([
            'date' => $time,
        ]);
        $url = $this->mainHost . '/message/history.json';
        $data = $this->request($url, $body, $headers);
        return resultRongCloudInfo($data);
    }

}